import { defineStore } from 'pinia'
import router from '@/router/index'
import { login } from '@/apis/index'
import { ref } from 'vue'
const modules = import.meta.glob('./../views/**/*.vue')

// 定义一个store，如果需要使用组合式Api，则第二个参数配置的是一个函数
export const useHomeStore = defineStore('home', () => {
    // 定义菜单树数据
    let menuTree = ref([])
    let routes = [] // 路由数据
    const isLogin = ref(localStorage.getItem('token') || false) // 是否登录
    const menu_active = ref('首页'); // 当前激活的菜单
    /**
     * 获取后来路由数据动态添加
     */
    function addRouters() {
        // 获取菜单树
        if (isLogin.value) {
            let r = getRouter(menuTree.value)
            r.forEach(item => {
                router.addRoute('layout', item)
            })
        }
    }
    /**
     * 获取路由数据
     * @param {*后台菜单树数据} menus 
     * @returns 返回构建好的路由数据
     */
    function getRouter(menus) {
        menus.forEach(item => {
            if (item.menuType === 'M') {
                let key = getKey(item.component)
                routes.push({ path: item.path, name: item.ename, component: modules[key] })
            }
            if (item.children && item.children.length > 0) {
                getRouter(item.children)
            }
        });
        return routes
    }
    /**
     * 
     * @param {*组件名称} componentStr 
     * @returns 返回组件的key
     */
    function getKey(componentStr) {
        for (const key of Object.keys(modules)) {
            if (key.includes(componentStr)) {
                return key
            }
        }
        return ""
    }
    async function requestLogin(username, password) {
        return await login(username, password)
    }

    return { addRouters, isLogin, menuTree, requestLogin }
})